Inceptor Q&A
社区版Inceptor常见问题整理
在初次接触Inceptor的时候,很多用户会对某些基本概念持有疑问,或者在使用的过程中遇到一些问题。本文针对这些待解决的问题,整理出常见的Q&A,希望能够为读者答疑解惑。
另外,社区版TDH已经在腾讯云市场正式上线,可以在腾讯云上直接安装“星环一站式大数据平台(Transwarp Data Hub)社区版”(https://market.cloud.tencent.com/products/3985)。点击文末的“阅读原文”将跳转至对应安装页面。
Inceptor是什么?
Inceptor基于Hadoop技术平台打造,是高效的批处理分析型数据库,可以有效解决大规模数据处理和分析的多种技术难题。社区版Inceptor完整支持SQL 2003标准,提供标准JDBC/ODBC连接支持,从而方便对接第三方软件。
Inceptor的使用手册在哪里获取?
请访问星环在线手册服务Transpedia(https://docs.transwarp.cn/)。
Inceptor的交互方法?
Inceptor使用Beeline作为命令行工具,让远程客户端向Inceptor提交请求并获取结果。
执行下面指令进入Inceptor交互界面:
beeline -u "jdbc:hive2://<inceptor_server>:10000/<database_name>" |
<inceptor_server>可以是服务器ip或者hostname。
如何创建一张表并实现查询?
这里将提供Inceptor建表与查询的快速入门。
进入beeline交互界面后执行下述语句创建一张表:
CREATE TABLE quickstart (a INT, b STRING) ; |
将位于HDFS上的数据导入表中:
LOAD DATA INPATH '/tmp/quickstart.txt' OVERWRITE INTO TABLE quickstart; |
查看表中的数据(仅列出前面10行):
SELECT * FROM quickstart limit 10; |
执行SQL语句时出错应该如何处理?
通过返回的报错信息和错误码,查询Transpedia(https://docs.transwarp.io/)的《Inceptor错误代码与信息查询手册》,了解相应的报错原因并获得解决方法。
社区版Inceptor支持哪些类型的表?
社区版Inceptor的表按不同维度可以划分为不同种类:
按Inceptor的所有权可分为:外部表(或简称为外表)和托管表。
按表的存储格式分类可分为:TEXT表、ORC表、CSV表。
按表是否分区可分为:分区表和非分区表。
按表是否分桶可分为:分桶表和非分桶表。
什么是外表和托管表?
Inceptor对外表不具有所有权,创建外表时会创建元数据,但是不会重新生成数据。删除外表时,仅会删除元数据,不会删除数据。不适合做统计分析,适合查询。通过CREATE EXTERNAL TABLE创建。
Inceptor对内表具有所有权,创建内表不仅创建元数据,同时还会创建一份新的数据。删除内表时,不仅会删除元数据,还会删除表中的数据。通过CREATE TABLE创建。
分区时要注意什么?
建议采用范围分区的方式分区而不是单值分区。
建议选择日期字段或地区字段为分区字段,这样通常可以适应业务需求同时保证适当的分区大小。
不推荐使用二级分区。
分区数控制在0-200个,最大不要超过200个分区。
建议单个分区内桶的数目略小于Inceptor配置的CPU数目。
设计一个分区数据时,尽量确保一轮CPU能处理完所有数据。
建议单个分区分桶数在500个以内,分区数和分桶数的乘积在10000以内。
分桶时要注意什么?
分桶字段尽量选择选值域均匀重复率不高的字段,如主键。
分桶生成文件后应该检查最大桶的文件大小,尽量避免数据倾斜。
单个桶压缩前小于1000MB,通常记录数小于1000w。
由于分桶数不能随着数据的增加而增加,所以有数据增量的表需要同时进行分区与分桶。
beeline中为什么无法显示Table完整字段的数据?
可能是因为表中数据的宽度超出了beeline的默认显示宽度,可以通过传递下面两个参数调整可显示宽度:
maxWidth:可显示的最大总宽度,单位:字符数。
maxColumnWidth:每个字段可显示的最大宽度,单位:字符数。
例如下述语句:
# 连接Server并将beeline可显示最大宽度设置为1500个字符,每个字段最长可以显示1500个字符。 beeline -u jdbc:hive2://localhost:10000/default --maxWidth=1500 --maxColumnWidth=1500 |
Inceptor的执行模式?
支持Local和Cluster两种执行模式。Cluster适用于批处理业务,Local模式适用于低延时、高并发、参与计算数据量少的场景。
通过参数ngmr.exec.mode进行切换,该参数支持两个取值:local和cluster(默认)。
出现报错Address already in use service SparkUI failed after 0 retries,应该怎么处理?
机器的4040端口被占用,因为TDH需要将该端口分配给Inceptor UI,所以请释放占用。
启动时出现报错could not create serversocket on address 0.0.0.0/0.0.0.0:10000,应该怎么处理?
机器的10000端口被占用,因为TDH需要将该端口分配给Inceptor Server,所以请释放占用。
Manager上Inceptor提示some executor are not started,同时查看4040页面发现只有部分Executors被启动,应该如何处理?
导致这种情况出现的原因通常是,当前可用的CPU或者内存少于启动Executor需要的资源,不足以启动。
例如,查看日志/var/log/inceptorsql1/hive-server2.log发现,节点启动Executor需要2384M,4个core,但是当前可用的资源仅为4096M,3个vcore,所以导致该节点的Executor无法启动。
解决方法:
如果可以的话请释放资源。如果资源无法释放,但同时希望Inceptor可以正常运行,请用如下方式解决。
首先在Manager界面的YARN的服务配置项中,通过以下两个参数确认YARN可以分配给Container的CPU个数和内存大小。
yarn.nodemanager.resource.cpu-vcores
yarn.nodemanager.resource.memory-mb
然后结合上述两个参数的大小,在Transwarp Manager上的Inceptor资源分配页面调整Inceptor Executor的资源设置,减少启动Executor所需的内存和内核数(需分别不大于上面两个参数),从而满足启动要求。
如何对表的列进行增加、删除和修改?
增加列:
ALTER TABLE [table] ADD COLUMNS ([column] [datat_type], [column] [data_type], ...); |
删除列:
ALTER TABLE [table] DELETE COLUMNS ([column1], [column2], ...); |
重命名列:
ALTER TABLE [table] CHANGE COLUMN [old_column_name] [new_column_name] [data_type]; |
如何查看SQL语句执行计划?
执行EXPLAIN语法,例如:
EXPLAIN SELECT * FROM table1; |
如何将原集群中的表迁移到新的集群?
第一步:进入旧集群,登录Inceptor,查看数据库,找到待迁移的表,执行语句:
show create table <dest_tbl>; |
该语句返回目标表的建表语句,请记录该结果。
第二步:在旧集群中确定目标数据库<dest_db>和目标表<dest_tbl>位于HDFS的位置,可以通过执行下述命令一层层展开目录找到目标。
sudo -u hdfs hdfs dfs -ls /<dir> |
第三步:在新的集群登录Inceptor,建立新的数据库。
第四步:通过Manager确定两套集群的HDFS NameNode的active节点。
执行下述命令将原集群中的表拷贝到新集群的正确数据库下:
hadoop distcp hdfs://<Active NameNode1 ip>:8020/path/to/<dest_tbl> hdfs://<Active NameNode2 ip>:8020/path/to/<dest_db> |
第五步进入新集群的Inceptor,用通过第一步获得的建表语句,创建新表即可。
如果目标表是分区表,还需要手动挂载分区,在beeline中执行形如下面所示的SQL语句:
alter table [表名] add partition (<p_key>='<p_value>') location <hdfs_partition_address>; |
其中<p_key>是分区键,<p_value>是分区值。
CSV文件导入Inceptor时,如何消除引用符号,例如双引号(")?
数据示例:
"1","alex","dba" "2","james","dba" |
采用下面的建表语句,通过设置quote.delim属性,可以在数据导入Inceptor时消除双引号:
drop table csv_table; create external table csv_table(col1 string,col2 string,col3 string) stored as csvfile location '/temp/csv/data' tblproperties('field.delim'=',', 'quote.delim'='"', 'line.delim'='\n'); |
quote.delim属性用于指定作为quote_delimiter的字符,默认值为“"”。
这个字符的作用为:如果字段本身包含了分隔符、换行符或者NULL值字符作为数据的一部分,将该字段放在两个quote_delimiter字符之间则可以让Inceptor将字段内部出现的分隔符和换行符作为数据的一部分处理。
关于其他问题
本文列举的都是关于Inceptor的比较常见的问题。对于其他任何问题,欢迎登录星环论坛(http://support.transwarp.cn)进行查询或者提供反馈,或者邮件联系support@transwarp.io。
往期原创文章
Guardian 5.0全新架构解析:大数据安全防御之盾(二)
Guardian 5.0全新架构解析:大数据安全防御之盾(一)
大数据开放实验室由星环信息科技(上海)有限公司运营,专门致力于大数据技术的研究和传播。若转载请在文章开头明显注明“文章来源于微信订阅号——大数据开放实验室”,并保留作者和账号介绍。